#ifndef __MYSTRING_H_
#define __MYSTRING_H_

#include <iostream>
class MyStringArray;

class MyString
{
public:
    MyString();
    MyString(const char *str);
    MyString(const MyString& s);
    //为什么要返回值？ 为什么要返回引用？
    //因为需要连续赋值   因为返回的*this是左值，需要进行拷贝构造，返回引用能够减少拷贝构造
    MyString& operator=(const MyString& s);
    MyString& operator+=(const MyString& s);
    MyString& operator+=(const char& c);

    MyString operator+(const MyString& s);
    MyString& operator-=(const MyString& s);
    MyString operator-(const MyString& s);

    char& operator[](int index);

    bool operator==(const MyString& s);


    //类型转换运算符重载
    operator int(); 
    operator double(); 

    //字符串切割
    MyStringArray split(const MyString& delim);

    void clear();

    ~MyString();



    friend std::ostream& operator<<(std::ostream& os,const MyString& s);
    friend std::istream& operator>>(std::istream& is,MyString& s);
private:
    char *string;
    int size;
    int capacity;
};

std::ostream& operator<<(std::ostream& os,const MyString& s);
std::istream& operator>>(std::istream& is,MyString& s);

class MyStringArray
{
public:
    MyStringArray();

    MyStringArray(const MyStringArray& s);
    // 拷贝构造 = 
    ~MyStringArray();

    MyStringArray& operator+=(const MyString& str);

    MyStringArray operator+(const MyString& str);

    MyStringArray& operator=(const MyStringArray& s);

    // + -= - []
    // <<  >>
    

    void show();

private:
    MyString* array;
    int size;
    int capacity;
};

#endif